/**
 * 重写相关 konva 基类配置对象
 */

import Konva from "konva";
// eslint-disable-next-line
// @ts-ignore
import { Delta } from "quill/core";

/**
 * 增强 Konva 类型声明
 */
// eslint-disable-next-line @typescript-eslint/no-namespace
export namespace IKonva {
  export type TextConfig = IKonvaTextConfig & Konva.TextConfig;
  export type LineConfig = IKonvaLineConfig & Konva.LineConfig;
  export type ImageConfig = IKonvaImageConfig &
    Omit<Konva.ImageConfig, "image">;
  export type TableConfig = IKonvaTableConfig & Konva.ShapeConfig;
  export type RichTextConfig = IRichTextConfig & Konva.NodeConfig;
  export type EchartConfig = IKonvaEchartConfig & Konva.ShapeConfig;
  export type Event = Konva.KonvaEventObject<MouseEvent>;
  export type EchartType = IEchartType;
  export type EchartSeries = IEchartSeries;
  export type UpdateShapeOptions = IUpdateShapeOptions;
  export type UpdateLineOptions = IUpdateLineOptions;
  export type LinePositionCache = ILinePositionCache;
}

/**
 * 重写 konva image 参数
 */
type IKonvaImageConfig = { source: string | File | Blob };

/**
 * Konva 表格配置对象
 */
type IKonvaTableConfig = {
  data: string[][]; // 表格数据
  stripe?: boolean; // 是否开启斑马纹
  border?: boolean; // 是否开启边框
  cellBorderColor?: string; // 单元格边框颜色
};

/**
 * 统计图配置
 */
type IKonvaEchartConfig = {
  echartTitle?: string; // 统计图标题
  echartType: IEchartType; // 统计图类型
  xAxis: string[]; // x 轴数据
  series: IEchartSeries[]; // y 轴数据
};

/**
 * 文本配置 因为直接使用 konva.textConfig 的话，会直接作用到 text 上，需要边框、填充则无法实现
 */
type IKonvaTextConfig = {
  borderColor?: string; // 边框颜色
  borderWidth?: number; // 边框宽度
  borderRadius?: number; // 边框圆角
  backgroundColor?: string; // 背景颜色
};

/**
 * 直线折线配置对象
 */
type IKonvaLineConfig = {
  points: number[];
  startShape?: { id: string; order: number };
  endShape?: { id: string; order: number };
};

/**
 * 富文本
 */
// eslint-disable-next-line
// @ts-ignore
type IRichTextConfig = { source: Blob; delta: Delta };

/**
 * konva echart 图表参数
 */
type IEchartSeries = { name: string; data: number[] };

/** 支持图标类型 */
type IEchartType = "bar" | "line" | "pie" | "radar";

/** 更新元素属性 */
type IUpdateShapeOptions = {
  x?: number;
  y?: number;
  text?: string;
  fill?: string;
  width?: number;
  height?: number;
  stroke?: string;
  fontSize?: number;
  textColor?: string;
  strokeWidth?: number;
  hiddenStroke?: boolean;
  strokeType?: "dash" | "solid";
};

/** Line position cache 直线移动过程中，需要与图形执行吸附节点 */
type ILinePositionCache = { id: string; x: number; y: number; order: number };

/** 更新 Line 的配置项 */
type IUpdateLineOptions = {
  lineWidth?: number;
  lineColor?: string;
  showPointer?: boolean;
};
